import turtle
import random
import math

def draw_fractal_tree(branch_length, angle, t, depth):
    """递归绘制分形树"""
    # 改变树枝粗细
    t.pensize(math.log(branch_length) * 2)
    
    # 绘制当前树枝
    t.forward(branch_length)
    
    # 如果还有深度，继续绘制子树枝
    if depth > 0:
        # 随机调整角度，使树更自然
        right_angle = angle + random.uniform(-15, 15)
        left_angle = angle + random.uniform(-15, 15)
        
        # 右分支
        t.right(right_angle)
        draw_fractal_tree(branch_length * random.uniform(0.6, 0.8), angle, t, depth - 1)
        
        # 回退并绘制左分支
        t.left(right_angle + left_angle)
        draw_fractal_tree(branch_length * random.uniform(0.6, 0.8), angle, t, depth - 1)
        
        # 回到原始方向
        t.right(left_angle)
    
    # 回退到分支点
    t.backward(branch_length)

def create_tree():
    """创建分形树图案"""
    # 创建画布和画笔
    screen = turtle.Screen()
    screen.title("分形树生成器")
    screen.bgcolor("black")
    
    t = turtle.Turtle()
    t.speed(0)  # 最快速度
    t.color("green")
    t.left(90)  # 向上
    t.up()
    t.backward(200)  # 向下移动一点，给树留出空间
    t.down()
    
    # 绘制树
    draw_fractal_tree(100, 30, t, 10)
    
    # 添加地面
    t.up()
    t.right(90)
    t.forward(300)
    t.left(90)
    t.backward(400)
    t.down()
    t.color("saddlebrown")
    t.pensize(5)
    t.forward(800)
    
    # 完成
    t.hideturtle()
    screen.exitonclick()

if __name__ == "__main__":
    create_tree()
